package com.dituo.esac.service;

import java.util.List;
import java.util.Map;

import org.springframework.http.server.reactive.ServerHttpResponse;

import com.dituo.core.exception.DtServerException;
import com.dituo.core.exception.UnauthorizedException;
import com.dituo.core.response.PageResultDTO;
import com.dituo.esac.dto.EsacAppInfoDTO;
import com.dituo.esac.dto.EsacCheckSaveDTO;
import com.dituo.esac.dto.EsacExportDTO;
import com.dituo.esac.dto.EsacImportDTO;
import com.dituo.esac.dto.EsacSearchDTO;
import com.dituo.esac.po.EsacCheckInfoPO;
import com.dituo.esac.po.EsacCheckPO;
import com.dituo.esac.po.EsacCommunityCountPO;
import com.dituo.esac.po.EsacDeviceNodePO;
import com.dituo.esac.po.EsacInfoPO;
import com.dituo.esac.po.EsacNodeListPO;
import com.dituo.esac.po.EsacPersonStatusPO;
import com.dituo.esac.po.EsacTemListPO;
import com.dituo.esac.po.TemperatureDayCountPO;

import reactor.core.publisher.Mono;

public interface EsacService {
	
	
	/**
	 * 查询人员数据信息
	 * 
	 * @param esacSearchDTO
	 */
	PageResultDTO<List<EsacNodeListPO>> listEsacHistoryPage(EsacSearchDTO esacSearchDTO);
	
	/**
	 * 测温记录
	 * 
	 * @param esacSearchDTO
	 */
	PageResultDTO<List<EsacTemListPO>> listEsacTemPage(EsacSearchDTO esacSearchDTO);
	
	/**
	 * 人员社区详情
	 * @param personId
	 * @return
	 */
	EsacInfoPO getEsacInfo(String personId);
	
	/**
	 * app人员社区详情
	 * @param personId
	 * @return
	 */
	EsacAppInfoDTO getAppInfo(EsacSearchDTO esacSearchDTO);
	
	/**
	 * 查询人员温度信息
	 * 
	 * @param esacSearchDTO
	 */
	PageResultDTO<List<EsacCheckPO>> listEsacCheckPage(EsacSearchDTO esacSearchDTO);
	
	/**
	 * 人员温度登记
	 * @param esacCheckSaveDTO
	 * @return
	 * @throws UnauthorizedException
	 * @throws DtServerException
	 */
    String saveEsacCheck(EsacCheckSaveDTO esacCheckSaveDTO) throws DtServerException;
	
    /**
                 * 社区人员信息导入
     * @param esacImportDTO
     * @return
     * @throws DtServerException
     */
	String importEsacInfo(EsacImportDTO esacImportDTO) throws DtServerException;
	
	/**
	 * web端统计查询小区信息
	 * 
	 * @param orgid
	 * @return
	 */
	EsacCommunityCountPO getEsacCommunity(Long orgid);
	
	/**
	 * 根据日期查询人员状态信息
	 * 
	 * @param time
	 * @param orgid
	 * @return
	 */
	List<EsacPersonStatusPO> getEsacDayPerson(String time, Long orgid);
	
	/**
	 * 近7天按天统计门开告警的数量
	 * 
	 * @param orgid
	 * @param roleAreaCode
	 * @param roleAreaCode
	 * @return orgType
	 */
	Map<String,Integer> getEsacWarnCountDay(Long orgid, String roleAreaCode, Integer orgType);
	
	/**
	 * 体温异常统计
	 * 
	 * @param esacSearchDTO
	 */
	PageResultDTO<List<EsacCheckInfoPO>> listEsacTemStatusPage(EsacSearchDTO esacSearchDTO);
	
	/**
	 * 近7天按天统计体温
	 * 
	 * @param orgId
	 */
	List<TemperatureDayCountPO> getEsacTempetWarnCountDay(Long orgId);
	
	/**
	 * 节点控制分页查询
	 * @param firedoorSearchDTO
	 * @return
	 */
	PageResultDTO<List<EsacDeviceNodePO>> listEsacDeviceNodePage(EsacExportDTO esacExportDTO);
	

	/**
	 * 查询设备历史数据信息
	 * 
	 * @param firedoorSearchDTO
	 */
	PageResultDTO<List<EsacDeviceNodePO>> listEsacDeviceHistoryPage(EsacExportDTO esacExportDTO);
	
	/**
	 * 导出数据到excel
	 * 
	 * @param response
	 * @param firedoorSearchDTO
	 * @return
	 * @throws Exception 
	 */
	Mono<Void> exportExcel(ServerHttpResponse response, EsacExportDTO esacExportDTO) throws Exception;
}
